﻿using NewLife.Collections;

namespace XCode.Transform;

/// <summary>数据上下文</summary>
public class DataContext
{
    #region 属性
    /// <summary>抽取设置</summary>
    public IExtractSetting Setting { get; set; }

    /// <summary>实体列表</summary>
    public IList<IEntity> Data { get; set; }

    /// <summary>抽取耗时，毫秒</summary>
    public Double FetchCost { get; set; }

    /// <summary>成功处理数</summary>
    public Int32 Success { get; set; }

    /// <summary>处理耗时</summary>
    public Double ProcessCost { get; set; }

    /// <summary>实体对象</summary>
    public IEntity Entity { get; set; }

    /// <summary>处理异常</summary>
    public Exception Error { get; set; }

    /// <summary>开始时间</summary>
    public DateTime StartTime { get; set; } = DateTime.Now;

    ///// <summary>状态对象</summary>
    //public Object State { get; set; }
    #endregion

    #region 索引器
    private readonly IDictionary<String, Object> _Items = new NullableDictionary<String, Object>(StringComparer.OrdinalIgnoreCase);
    /// <summary>用户数据</summary>
    /// <param name="item"></param>
    /// <returns></returns>
    public Object this[String item] { get => _Items[item]; set => _Items[item] = value; }
    #endregion

    #region 扩展属性
    /// <summary>抽取速度</summary>
    public Int32 FetchSpeed => (FetchCost == 0 || Data == null) ? 0 : (Int32)(Data.Count * 1000L / FetchCost);

    /// <summary>处理速度</summary>
    public Int32 ProcessSpeed => (ProcessCost == 0 || Data == null) ? 0 : (Int32)(Data.Count * 1000L / ProcessCost);
    #endregion
}